The Hardware Software Interface Section 1 Memory Data and Addressing
课程主页:https://courses.cs.washington.edu/courses/cse351/16sp/
课程资料:
实验部分:https://github.com/vuquangtrong/HW-SW_Interface_Course
实验说明:https://courses.cs.washington.edu/courses/cse351/13sp/lab-0.html
课件:http://academictorrents.com/details/b63a566df824b39740eb9754e4fe4c0140306f4b
课程视频:https://www.bilibili.com/video/BV1Zt411s7Gg?from=search&seid=8781593976070799647
CMU课程完成了一半,接下来学习华盛顿大学的软硬件接口进行复习和巩固。
这次回顾第一部分,内存,数据和地址。
第一部分:内存,数据和地址
初步内容
CPU“内存”:寄存器和指令缓存
- CPU中有固定数量的寄存器
- 寄存器保存数据
- CPU中有一个I-缓存,用于保存最近获取的指令
- 如果执行适合高速缓存的循环,则CPU仅将这些指令转到内存一次,然后从高速缓存中执行这些指令
性能:不只是CPU速度
- 数据和指令驻留在内存中
- 要执行一条指令,必须将其提取到CPU中
- 接下来,必须从内存中提取指令所操作的数据并带到CPU
- CPU$\leftrightarrow$内存带宽可能会限制性能
- 提升性能1:改良硬件以增加内存带宽(例如DDR→DDR2→DDR3)
- 提高性能2:将更少的数据移入/移出CPU
- 在CPU芯片本身中放入一些“内存”(这是“缓存”内存)
二进制表示
- $2$进制表示
- 将$351_{10}$表示为$0000000101011111_2$或$101011111_2$
- 电子实现
- 易于存储的双稳态元素
- 可靠地通过嘈杂的电线传输
以位和字节表示信息
编码字节值
$1$字节等于$8$个二进制位。
- 二进制:$00000000_{2}-11111111_{2}$
- 十进制:$0_{10}-255_{10}$
- 十六进制:${0 0}_{16}-\mathrm{FF}_{16}$
对应关系:
面向字节的内存组织
- 程序指向地址
- 从概念上讲,内存是一个非常大的字节数组,每个字节都有一个地址(索引)
- 操作系统为每个“进程”提供专用的地址空间
- 进程=正在执行的程序+它的数据+它的“状态”
- 程序可以修改自己的数据,但不能修改其他数据
- 破坏代码或“状态”通常会导致崩溃(或安全漏洞)
- 编译器+运行时系统控制内存分配
- 应该在哪里存储不同的程序对象
- 所有分配都在一个地址空间内
机器字
- 机器有“字长”
- 整型数据的标称大小
- 包括地址
- 直到最近,大多数机器都使用32位(4字节)字
- 将地址限制为4GB
- 对于内存密集型应用程序而言变得太小
- 当前大多数x86系统使用64位(8字节)字
- 可能的地址空间:$2^{64} \approx 1.8 \times 10^{19}$字节
- 为了向后兼容,许多CPU支持不同的字长
- 字节数始终为2的幂:$1,2,4,8, \ldots$
- 整型数据的标称大小
面向字的内存组织
- 地址指定内存中字节的位置
- 字中第一个字节的地址
- 连续字的地址相差4(32位)或8(64位)
组织和寻址内存中的数据
地址和指针
- 地址是内存中的位置
- 指针是包含地址的数据对象
- 地址$0004$存储值$351$(或$15 \mathrm{F}_{16}$)
- 存储在地址$\mathrm{001C}$的指针指向地址$0004$
- 存储在地址$\mathrm{0024}$的指针指向地址$\mathrm{001C}$
- 地址$0014$存储值$12$
数据表示
对象大小(以字节为单位)
字节顺序
- 大端(PowerPC,Sun,Internet)
- 大端优先:最高有效字节的地址最小
- 小端(x86)
- 小端优先:最低有效字节的地址最小
- 例子
- 变量具有4字节:$0 \mathrm x 01234567$
- 变量的地址:$0\mathrm x100$
使用C语言处理内存中的数据
这部分主要是C语言的基本知识,这里从略。
布尔代数和位级操作
布尔代数
C中比特级运算
$\&, |, {\hat {} } , \sim$运算在C语言中可以使用
- 效果是比特级的
例子:
对比:C中逻辑运算
C中逻辑运算:${\&}{\&}, |, 1$
例子:
表示和操纵集合
- 比特向量可以表示集合
- 长度为$w$的比特向量可以表示$\{0, \ldots, w-1\}$的子集
- $a_{j}=1$如果$j \in A$
- $01101001:\{0,3,5,6\}$
- 操作:
- $\&$:交集
- $|$:并集
- $\hat{}$:对称差
- $\sim$ :补集
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Doraemonzzz!
评论
ValineLivere